home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 5
/
Apprentice-Release5.iso
/
Source Code
/
Libraries
/
Sherlock 2.0
/
DevLibSrc
/
Main_DevLib
/
LIBdebug.h
< prev
next >
Wrap
Text File
|
1995-11-28
|
4KB
|
140 lines
/*
devlib: Debugging and fatal error macros.
source: LIBdebug.h
started: November 4, 1993.
version:
November 28, 1995.
Always provide prototype for `err_assert_failed'.
November 9, 1995.
Added LIB_DONT_USE_ES logic so we can use Mac Dialogs
instead of es routines for error messages.
Added err_error1...err_error4 and err_fatal1...err_fatal4.
These are useful for Mac-style alerts.
#define err_error1...err_error4 and err_fatal1...err_fatal4 in terms of
error and fatal when LIB_DONT_USE_ES is not defined.
July 11, 1994.
Added PERM_ASSERT macro.
*/
#ifndef LIBdebug_h_
#define LIBdebug_h_
#pragma once
/*
The following macros are always defined.
*/
#define current_ftag SL_CALLNAME(0)
#define caller_ftag SL_CALLNAME(1)
#define caller2_ftag SL_CALLNAME(2)
#define caller3_ftag SL_CALLNAME(3)
#ifdef LIB_DONT_USE_ES
#define PERM_ASSERT(a) if(!(a)) { err_assert_failed(#a, __LINE__, __FILE__); }
#else
#define PERM_ASSERT(a)\
if(!(a)) {\
es_internal_err(#a, __LINE__, __FILE__); ecnl();\
fatal_end();\
}
#define PERM_ASSERT_TRACE(a,statements)\
if(!(a)) {\
es_internal_err(#a, __LINE__, __FILE__); ecnl();\
statements; fatal_end();\
}
#define error(stat) if (err_begin()) { stat; err_context(); }
#define fatal(stat) { fatal_begin(); stat; fatal_end(); }
#endif
#ifdef PRODUCTION
#define ASSERT(a)
#define ASSERT_TRACE(a,statements)
#define DEBUG(a)
#define DTAG(s) char * dtag = NULL
#define FTAG(s) char * ftag = NULL
#define FTAGV(s) char * ftagv = NULL
#else /* n PRODUCTION */
#ifdef LIB_DONT_USE_ES
#define ASSERT(a) if(!(a)) { err_assert_failed(#a, __LINE__, __FILE__); }
#else
#define ASSERT(a)\
if(!(a)) {\
es_assert_failed(#a, __LINE__, __FILE__); fatal_end();\
}
#define ASSERT_TRACE(a,statements)\
if(!(a)) {\
es_assert_failed(#a, __LINE__, __FILE__);\
enl(); statements; fatal_end();\
}
#endif
#define DEBUG(a) a
#define DTAG(s) char * dtag = s
#define FTAG(s) char * ftag = s
#define FTAGV(s) char * ftagv = s
#endif /* n PRODUCTION */
/*
Function prototypes for application-specific routines called by the debugging macros.
*/
#ifdef LIB_DONT_USE_ES
/* These routines have fixed format for compatibility with the Mac ParamText toolbox call. */
void err_assert_failed (char * condition, int line, char * file);
void err_error1(char * mess1);
void err_error2(char * mess1, char * mess2);
void err_error3(char * mess1, char * mess2, char * mess3);
void err_error4(char * mess1, char * mess2, char * mess3, char * mess4);
void err_fatal1(char * mess1);
void err_fatal2(char * mess1, char * mess2);
void err_fatal3(char * mess1, char * mess2, char * mess3);
void err_fatal4(char * mess1, char * mess2, char * mess3, char * mess4);
#else
void err_assert_failed (char * condition, int line, char * file);
void es_assert_failed (char * condition, int line, char * file);
void es_internal_err (char * condition, int line, char * file);
bool err_begin (void);
void err_context(void);
void fatal_begin(void);
void fatal_end (void);
#define err_error1(m1) error(es(m1))
#define err_error2(m1,m2) error(es(m1); es(m2))
#define err_error3(m1,m2,m3) error(es(m1); es(m2); es(m3))
#define err_error4(m1,m2,m3,m4) error(es(m1); es(m2); es(m3); es(m4))
#define err_fatal1(m1) fatal(es(m1))
#define err_fatal2(m1,m2) fatal(es(m1); es(m2))
#define err_fatal3(m1,m2,m3) fatal(es(m1); es(m2); es(m3))
#define err_fatal4(m1,m2,m3,m4) fatal(es(m1); es(m2); es(m3); es(m4))
#endif
#endif /* LIBdebug_h_ */